import java.util.*;

public class project {
    public boolean isPossible(int[] nums) {
        Map<Integer, PriorityQueue<Integer>> map=new HashMap<>();
        for(int num:nums){
            if(!map.containsKey(num)){
                map.put(num,new PriorityQueue<>());
            }
            if(map.containsKey(num-1)){
                int min=map.get(num-1).poll();
                if(map.get(num-1).isEmpty()){
                    map.remove(num-1);
                }
                map.get(num).offer(min+1);
            }else{
                map.get(num).offer(1);
            }
        }
        Set<Map.Entry<Integer,PriorityQueue<Integer>>> set=map.entrySet();
        for(Map.Entry<Integer,PriorityQueue<Integer>> entry:set){
            PriorityQueue<Integer> queue=entry.getValue();
            if(queue.peek()<3){
                return false;
            }
        }
        return true;
    }


















    public int numSubarraysWithSum(int[] nums, int goal) {
        int ret=0;
        int sum=0;
        Map<Integer,Integer> map=new HashMap<>();
        for(int num : nums){
            map.put(sum,map.getOrDefault(sum,0)+1);
            sum+=num;
            ret+=map.getOrDefault(sum-goal,0);
        }
        return ret;
    }



















    public static void main(String[] args) {
//        int len=maxUniqueSplit("wwwzfvedwfvhsww");
//        System.out.println(len);
    }
    int max=1;
    public int maxUniqueSplit(String s) {
        Set<String> set=new HashSet<>();
        dfs(set,s,0,0);
        return max;
    }
    public void dfs(Set<String> set,String s,int index,int len){
        if(index>=s.length()){
            max=Math.max(max,len);
        }else{
            for(int i=index;i<s.length();i++){
                String str=s.substring(index,i+1);
                if(set.add(str)){
                    dfs(set,s,i+1,len+1);
                    set.remove(str);
                }
            }
        }
    }

















    public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) {
        Map<Integer,Integer> map=new HashMap<>();
        int ret=0;
        int len=values.length;
        int count=0;
        for(int i=0;i<len-1;i++){
            int value=values[i];
            int label=labels[i];
            for(int j=i+1;j<len;j++){
                if(value<values[j]) {
                    values[i]=values[j];
                    values[j]=value;
                    value=values[i];
                    labels[i]=labels[j];
                    labels[j]=label;
                    label=labels[i];
                }
            }
        }
        for(int i=0;i<len;i++){
            if(count==numWanted){
                return ret;
            }
            int value=map.getOrDefault(labels[i],0);
            if(value<useLimit){
                value++;
                count++;
                map.put(labels[i],value);
                ret+=values[i];
            }
        }
        return ret;
    }
















    public String complexNumberMultiply(String num1, String num2) {
        String[] nums1=num1.split("\\+|i");
        String[] nums2=num2.split("\\+|i");
        int ax=Integer.parseInt(nums1[0]);
        int ay=Integer.parseInt(nums1[1]);
        int bx=Integer.parseInt(nums2[0]);
        int by=Integer.parseInt(nums2[1]);
        return (ax*bx-ay*by)+"+"+(ax*by+ay*bx)+"i";
    }
}
